DLL

Otázka od: Jan Fiala [work]

23. 10. 2002 14:27

Ahojte,
  potreboval bych si ujasnit spravnost psani DLL. Nektere zasady jsem vycetl
z knihy, ale jedna vec mi tam vrtala hlavou. Jak se delaji Hlavickove
soubory. Potrebuji v DLL vytvorit objekt a aplikace by ho mela vyuzivat. K
tomu ale potrebuji jeho strukturu. Jedina moznost jak to udelat me napada,
ze hlavickovy soubor by mel mit vsechny fce abstraktni a nemusi obsahovat
sekce Private a Protected. Je tomu tak?

Dík
Jan Fiala
_________________________________________
fiala@kvasar.cz
http://www.kvasar.cz
tel.:577212800
ICQ: 22070733
_________________________________________

---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.401 / Virová báze: 226 - datum vydání: 09.10.2002

Odpovedá: Ondrej Kelle

23. 10. 2002 12:52

> potreboval bych si ujasnit spravnost psani DLL. Nektere
> zasady jsem vycetl z knihy, ale jedna vec mi tam vrtala
> hlavou. Jak se delaji Hlavickove soubory. Potrebuji v DLL
> vytvorit objekt a aplikace by ho mela vyuzivat.

Pozor, to uz ale nebude klasicky "spravna" DLL, t.j. pouzitelna aj v inych
jazykoch.
Taka by mala exportovat iba stdcall funkcie, a nie odkazy na instancie
Delphi tried, s ktorymi si napr. VC++ asi neporadi.

> K tomu ale
> potrebuji jeho strukturu. Jedina moznost jak to udelat me
> napada, ze hlavickovy soubor by mel mit vsechny fce
> abstraktni a nemusi obsahovat sekce Private a Protected.
> Je tomu tak?

Presne tak, potrebujes mat spolocnu unitu zdielanu DLL aj EXE, ktora bude
obsahovat deklaraciu ciste abstraktnej triedy, t.j. same virtualne
abstraktne metody.
V DLL si potom mozes napisat konkretneho potomka, ktory vsetky tie metody
implementuje.
Zaroven budes potrebovat exportovane funkcie na vytvaranie a uvolnovanie
instancii.
Z EXE Ti potom staci zavolat funkciu, ktora v DLL vytvori instanciu, a volat
jej (z pohladu EXE) abstraktne metody.
Treba pritom dodrziavat urcitu disciplinu, pamet alokovana v DLL musi byt
dealokovana tiez v DLL, pred uvolnenim DLL (FreeLibrary) treba uvolnit
vsetky instancie z tej DLL, atd.

HTH
TOndrej

Odpovedá: Petr Vones

23. 10. 2002 14:19

From: "Jan Fiala [work]" <delphi@kvasar.cz>
> soubory. Potrebuji v DLL vytvorit objekt a aplikace by ho mela vyuzivat. K

Tohle nikdy nedelej, protoze z knihoven nelze exportovat objekty. Lze sice
delat ruzne okliky kdy exportujes jen pointery a ty potom ruzne pretypovavas
pres definice abstraktnich trid, ale to je pomerne rychla cesta do pekel.
Budto pouzij balicky nebo COM objekty (nebo alespon interface).

Petr Vones

Odpovedá: Jan Fiala [work]

24. 10. 2002 15:48

je mi jasne, ze to budu muset pretypovavat. Puvodne jsem myslel, ze DLL jsou
urceny odlehceni samotne aplikace. S COM objektama jsem se zabyval pouze
chvili, ale pripadalo mo to hrozne slozite. Balicky jsem nezkousel, nemohl
bys mi poradit, kde bych nasel nejaky priklad pro praci s balicky (podporuje
to D6P)?


Dik moc
Přeji Hezký den
Jan Fiala
_________________________________________
fiala@kvasar.cz
http://www.kvasar.cz
tel.:577212800
ICQ: 22070733
_________________________________________



-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
Behalf Of Petr Vones
Sent: Wednesday, October 23, 2002 1:42 PM
To: Konference Delphi
Subject: Re: DLL


From: "Jan Fiala [work]" <delphi@kvasar.cz>
> soubory. Potrebuji v DLL vytvorit objekt a aplikace by ho mela vyuzivat. K

Tohle nikdy nedelej, protoze z knihoven nelze exportovat objekty. Lze sice
delat ruzne okliky kdy exportujes jen pointery a ty potom ruzne pretypovavas
pres definice abstraktnich trid, ale to je pomerne rychla cesta do pekel.
Budto pouzij balicky nebo COM objekty (nebo alespon interface).

Petr Vones


---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.401 / Virová báze: 226 - datum vydání: 09.10.2002

Odpovedá: Petr Vones

24. 10. 2002 18:16

From: "Jan Fiala [work]" <delphi@kvasar.cz>
> Puvodne jsem myslel, ze DLL jsou urceny odlehceni samotne aplikace.

Ne, v adresovem prostoru procesu je to jeden celek, at je to EXE nebo DLL. U
DLL ti pribyva ale jeste dalsi (zbytecna) rezie se zavadenim. Smysl DLL je v
tom kdyz mas kod, ktery chces pouzit ve vice aplikacich a ruznych vyvojovych
prostredich. Proto nelze exportovat Delphi tridy, ktere jsou jen jakousi
proprietarni datovou strukturou.

> Balicky jsem nezkousel, nemohl bys mi poradit, kde bych nasel nejaky priklad
> pro praci s balicky (podporuje to D6P)?

Jiste, balicky existuji od Delphi 3, neco je napriklad tady, i kdyz uz trochu
starsiho data: http://www.obsof.com/delphi_tips/DL613.html

Petr Vones